using System;
using System.Reflection;
using System.Linq;
using System.Collections.Generic;

namespace Kollektiv.Validation
{
	[AttributeUsage(AttributeTargets.Parameter)]
	public abstract class ParameterValidatorAttribute : Attribute
	{		
		public abstract void Validate (object value, string parameterName);
		
		public static IEnumerable<ParameterValidatorAttribute> GetValidatiorAttributes(ParameterInfo info)
		{
			return info.GetCustomAttributes(true)
				.Where(a=>a.GetType().IsSubclassOf(typeof(ParameterValidatorAttribute)))
				.Select<object, ParameterValidatorAttribute>(o=>(ParameterValidatorAttribute)o);
		}
	}
	
	public class ParameterValidatorException : Exception
	{
		public ParameterValidatorException (string message):base(message)
		{
		}
	}
}

